/**
 * @file 格式化工具函数入口
 * @description 导出各种格式化工具函数
 * @date 2024-06-15
 */

import { formatDate, formatTime, formatDateTime } from './date';
import { formatDistance } from './distance';
import { formatFileSize } from './filesize';
import { formatGeoCoord } from './geo';

// 导出所有格式化工具函数
export {
  formatDate,
  formatDateTime,
  formatTime,
  formatDistance,
  formatFileSize,
  formatGeoCoord
};

/**
 * 格式化持续时间
 * @param seconds 持续时间（秒）
 * @returns 格式化后的字符串 (HH:MM:SS)
 */
export function formatDuration(seconds: number): string {
  if (!seconds && seconds !== 0) return '00:00:00';
  
  const hours = Math.floor(seconds / 3600);
  const minutes = Math.floor((seconds % 3600) / 60);
  const secs = Math.floor(seconds % 60);
  
  return [
    hours.toString().padStart(2, '0'),
    minutes.toString().padStart(2, '0'),
    secs.toString().padStart(2, '0')
  ].join(':');
}

/**
 * 格式化数字为固定小数位
 * @param value 数字值
 * @param digits 小数位数
 * @param defaultValue 默认值（当value无效时）
 * @returns 格式化后的字符串
 */
export function formatNumber(value: number, digits: number = 2, defaultValue: string = '0'): string {
  if (value === undefined || value === null || isNaN(value)) {
    return defaultValue;
  }
  
  return value.toFixed(digits);
}

/**
 * 格式化百分比
 * @param value 百分比值（0-100）
 * @param digits 小数位数
 * @returns 格式化后的百分比字符串
 */
export function formatPercent(value: number, digits: number = 1): string {
  if (value === undefined || value === null || isNaN(value)) {
    return '0%';
  }
  
  return `${value.toFixed(digits)}%`;
}

/**
 * @file 格式化工具索引
 * @description 提供统一的格式化函数导出
 * @date 2024-07-01
 */

// 导出日期时间相关格式化函数
export * from './date';

// 导出距离速度相关格式化函数
export * from './distance';

// 导出文件大小相关格式化函数
export * from './filesize';

// 导出地理位置相关函数
export * from './geo';

// 创建默认导出对象
import * as dateUtils from './date';
import * as distanceUtils from './distance';
import * as filesizeUtils from './filesize';
import * as geoUtils from './geo';

const formatUtils = {
  ...dateUtils,
  ...distanceUtils,
  ...filesizeUtils,
  ...geoUtils
};

export default formatUtils;

/**
 * 注意：为了避免命名冲突，原format.ts中的函数已迁移到各子模块中：
 * - 日期时间相关: ./date.ts
 * - 距离速度相关: ./distance.ts
 * - 文件大小相关: ./filesize.ts
 * - 地理位置相关: ./geo.ts
 */ 